package com.zpark;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.io.File;
import java.util.List;
import java.util.UUID;

/**
 * @PackageName: com.zpark
 * @ClassName: FileController
 * @Description:
 * @author: RZS
 * @date: 2023/5/12  9:44
 */
@RestController
@RequestMapping("/file")
public class FileController {

    @PostMapping("/uploadFile")
    public String upload(MultipartFile file){
        String msg = "";

        try {
            // 判断上传的文件是否为空
            if (file.isEmpty()) {
                msg =  "文件为空";
            }else {
                // 获取文件名字
                String fileName = file.getOriginalFilename();
                // 获取文件后缀
                String suffixName = fileName.substring(fileName.lastIndexOf("."));
                // 设置文件存储路径
                String filePath = "C:/Education/upload/";
                // 生成文件名字
                String newFileName = UUID.randomUUID().toString() + suffixName;
                String path = filePath + newFileName;
                // 创建文件对象
                File f = new File(path);
                // 检查该目录是否存在
                if (!f.getParentFile().exists()) {
                    // 目录不存在，创建目录
                    f.getParentFile().mkdirs();
                }
                // 写入文件
                file.transferTo(f);
                msg =  "文件上传成功";
            }
        } catch(Exception e) {
            e.printStackTrace();
        }

        return msg;
    }

    /**
     *  多文件上传流程
     *      1.前端上传多个文件
     *      2.后台使用请求对象(MultipartHttpServletRequest)接收整个请求流
     *      3.获取MultipartFile集合
     *      4.定义缓冲字节输出流
     *      5.遍历MultipartFile集合
     *      6.获取每一个MultipartFile对象
     *      7.定义上传路径
     *      8.判断上传文件是否为空（也就是没有上传）
     *      9.如果不为空，则通过缓冲字节输出流写入到上传路径
     */
    @PostMapping("/batchUpload")
    public String batchUpload(MultipartHttpServletRequest request){

        String msg = "";

        List<MultipartFile> files = request.getFiles("file");

        for (MultipartFile file : files) {
            try {
                // 获取文件名字
                String fileName = file.getOriginalFilename();
                // 获取文件后缀
                String suffixName = fileName.substring(fileName.lastIndexOf("."));
                // 设置文件存储路径
                String filePath = "C:/Education/upload/";
                // 生成文件名字
                String newFileName = UUID.randomUUID().toString() + suffixName;
                String path = filePath + newFileName;
                // 创建文件对象
                File f = new File(path);
                // 检查该目录是否存在
                if (!f.getParentFile().exists()) {
                    // 目录不存在，创建目录
                    f.getParentFile().mkdirs();
                }
                // 写入文件
                file.transferTo(f);
                msg =  "文件上传成功";
            } catch(Exception e) {
                e.printStackTrace();
            }
        }

        return msg;
    }
}
